一、 使用全局函数作为回调

在C++中可以使用类似于C语言方式的回调函数,也就是将全局函数定义为回调函数:

1
2
3
4
5
6
7
8
9
10
typedef void(*pCalledFun)(int*);
void GetCallBack(pCalledFun parafun) {
/* do something */
}
void funCallback(int* iNum) {
/* do something */
}
void main() {
GetCallBack(funCallback);
}

二、使用类的静态成员函数作为回调

静态成员函数和全局函数很类似,函数调用时不会使用this指针,可以像使用全局函数一样使用静态函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
typedef void (*pFun)(void);
class CCallBack{
public:
static void TextPrint(void) {
cout << "Static Callback Function of a Class" << endl;
}
};
void ForText(pFun pFun1) {
pFun1();
}
void main() {
ForText(CCallBack::TextPrint);
}

三、使用类的非静态成员函数作为回调

要注意的是非静态的成员函数必须通过对象来访问,我们可以这样使用,即给Caller多传个对象进去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class CCallback {
public:
void Func(int a) {
cout << "member function callback called with para= " << a << endl;
}
};
typedef void (CCallback::*pMmeberFunc)(int);
void Caller(CCallback* pObj, pMemberFunc p) {
(pObj->*p)(1);
}
int main(int argc, char** argv) {
CCallback obj;
Caller(&obj, &CCallback::Func);
}